package com.example.springboot.service.impl;

import com.example.springboot.common.vo.PermissionsMenu;
import com.example.springboot.common.vo.TreeMenu;
import com.example.springboot.dao.SysMenuDao;
import com.example.springboot.entity.SysMenu;
import com.example.springboot.service.SysMenuService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * (SysMenu)表服务实现类
 *
 * @author makejava
 * @since 2021-09-17 09:49:11
 */
@Service("sysMenuService")
public class SysMenuServiceImpl implements SysMenuService {
	@Resource
	private SysMenuDao sysMenuDao;

	/**
	 * 通过ID查询单条数据
	 *
	 * @param id 主键
	 * @return 实例对象
	 */
	@Override
	public SysMenu queryById(Long id) {
		return this.sysMenuDao.queryById(id);
	}

	/**
	 * 查询多条数据
	 *
	 * @param offset 查询起始位置
	 * @param limit  查询条数
	 * @return 对象列表
	 */
	@Override
	public List<SysMenu> queryAllByLimit(int offset, int limit) {
		return this.sysMenuDao.queryAllByLimit(offset, limit);
	}

	/**
	 * 通过实体作为筛选条件查询
	 *
	 * @param sysMenu 实例对象
	 * @return 对象列表
	 */
	public List<SysMenu> queryAll(SysMenu sysMenu) {
		return this.sysMenuDao.queryAll(sysMenu);
	}

	/**
	 * 通过实体作为筛选条件查询
	 *
	 * @return 对象列表
	 */
	@Override
	public List<TreeMenu> queryTreeMenu(Long id) {

		List<SysMenu> menuList = this.sysMenuDao.queryAll(null);

		List<TreeMenu> treeMenuList = TreeMenu.TreeBuild(menuList, 0L);
		return treeMenuList;
	}

	/**
	 * 通过实体作为筛选条件查询
	 *
	 * @return 对象列表
	 */
	@Override
	public List<TreeMenu> queryTreeRole(Long id) {

		List<SysMenu> menuList = this.sysMenuDao.queryTreeMenu(id);

		List<TreeMenu> treeMenuList = TreeMenu.TreeBuild(menuList, 0L);
		return treeMenuList;
	}

	@Override
	public List<PermissionsMenu> queryUserMenuById(Long id) {
		List<SysMenu> menuList = this.sysMenuDao.queryUserMenuById(id);

		List<PermissionsMenu> treeMenuList = PermissionsMenu.TreeBuild(menuList, 0L);
		return treeMenuList;
	}


	/**
	 * 新增数据
	 *
	 * @param sysMenu 实例对象
	 * @return 实例对象
	 */
	@Override
	public SysMenu insert(SysMenu sysMenu) {

		SysMenu sysMenu1;

		if (this.queryById(sysMenu.getId()) == null) {
			sysMenu.setModifydate(new Date());
			sysMenu.setCreatedate(new Date());
			this.sysMenuDao.insert(sysMenu);
			sysMenu1 = this.queryById(sysMenu.getId());
		} else {
			sysMenu1 = null;
		}
		return sysMenu1;
	}

	/**
	 * 修改数据
	 *
	 * @param sysMenu 实例对象
	 * @return 实例对象
	 */
	@Override
	public SysMenu update(SysMenu sysMenu) {

		SysMenu sysMenu1 = this.queryById(sysMenu.getId());
		if (!sysMenu.equals(sysMenu1)) {
			sysMenu.setModifydate(new Date());
			this.sysMenuDao.update(sysMenu);
			sysMenu1 = this.queryById(sysMenu.getId());
		} else {
			sysMenu1 = null;
		}
		return sysMenu1;
	}

	/**
	 * 通过主键删除数据
	 *
	 * @param id 主键
	 * @return 是否成功
	 */
	@Override
	public boolean deleteById(Long id) {
		return this.sysMenuDao.deleteById(id) > 0;
	}
}